package zakupy.exec;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import nowe.Miasto;
import nowe.Wojewodztwo;
import zakupy.entity.ZakupyKategoria;
import zakupy.entity.ZakupySklep;
import zakupy.entity.ZakupyTowar;
import zakupy.entity.ZakupyUser;

public class test {
	static EntityManager  em=Persistence.createEntityManagerFactory("jpazakupy").createEntityManager();
	static EntityTransaction entityTransaction;
	List<ZakupySklep> lista_sklepow=new ArrayList<ZakupySklep>();
	List<ZakupyKategoria> lista_kategorii=new ArrayList<ZakupyKategoria>();
	
	public List<ZakupyKategoria> getLista_kategorii() {
		return lista_kategorii;
	}
	static void transaction(){
		entityTransaction=null;
		entityTransaction=em.getTransaction();
		entityTransaction.begin();
	}
	public static EntityManager getEM(){
		//if (em==null)
		//{
		em =Persistence.createEntityManagerFactory("jpazakupy").createEntityManager();
		transaction();
		//}
		//else
		//	transaction();
		return em;
	}
	public void setLista_kategorii(List<ZakupyKategoria> lista_kategorii) {
		this.lista_kategorii = lista_kategorii;
	}
	public List<ZakupySklep> getLista_sklepow() {
		return lista_sklepow;
	}
	public void setLista_sklepow(List<ZakupySklep> lista_sklepow) {
		this.lista_sklepow = lista_sklepow;
	}
	public static String dodajTowar(ZakupyTowar zt,String nazwaKategorii,
			String nazwaSklepu,String sesja){
		try{
			ZakupyKategoria zk=new ZakupyKategoria();
			System.out.println("kategoria"+czyIstniejeKategoria(nazwaKategorii));
			zk.setId(czyIstniejeKategoria(nazwaKategorii));

			ZakupySklep zs=new ZakupySklep();
			System.out.println("sklep"+czyIstniejeSklep(nazwaSklepu));
			zs.setId(czyIstniejeSklep(nazwaSklepu));

			ZakupyUser zu=new ZakupyUser();
			zu.setId(1);
			
			zt.setZakupyKategoria(zk);
			zt.setZakupySklep(zs);
			zt.setZakupyUser(zu);
/*	        Calendar cal=Calendar.getInstance();
			zt.setDatadodania(cal.getTime());*/
			getEM().persist(zt);
			entityTransaction.commit();
			em.close();	
		/*ZakupyKategoria zk=new ZakupyKategoria();
		System.out.println(czyIstniejeKategoria(nazwaKategorii));
		zk.setId(czyIstniejeKategoria(nazwaKategorii));
		
		ZakupySklep zs=new ZakupySklep();
		System.out.println(czyIstniejeSklep(nazwaSklepu));
		zs.setId(czyIstniejeSklep(nazwaSklepu));
		
		ZakupyUser zu=new ZakupyUser();
		zu.setId(1);
		
		zt.setZakupyKategoria(zk);
		zt.setZakupySklep(zs);
		zt.setZakupyUser(zu);
        Calendar cal=Calendar.getInstance();
		zt.setDatadodania(cal.getTime());
		getEM().persist(zt);
		entityTransaction.commit();
		em.close();*/
		return "1";
		}
		catch(Exception e){
			return e.getMessage();
		}
	}
	public static void main(String[] args) {
		
		
		/*
		 * dodawanie kategorii
		 */
		ZakupyKategoria zk=new ZakupyKategoria();
		System.out.println(czyIstniejeKategoria("cvc"));
		zk.setId(1);
		//zk.setNazwa("nabial");
		//System.out.println(dodajKategorie("nabial1"));
		/*
		 * 
		 */
		ZakupySklep zs=new ZakupySklep();
		System.out.println(czyIstniejeSklep("aqa"));
		zs.setId(1);
		/*
		 * dodawanie usera
		 */
		ZakupyUser zu=new ZakupyUser();
		zu.setId(1);
		//zu.setEmail("hyski.mateusz@gmail.com");
		//zu.setNazwa("mateusz");
		//zu.setSesja("");
		//dodajUsera(zu);
		/*
		 * 
		 */
		
		
		ZakupyTowar zt=new ZakupyTowar();
		zt.setCena(20.00);
		zt.setNazwa("cos1");
		zt.setZakupyKategoria(zk);
		zt.setZakupySklep(zs);
		zt.setZakupyUser(zu);
        Calendar cal=Calendar.getInstance();
        
		zt.setDatadodania(cal.getTime());
		getEM().persist(zt);
		entityTransaction.commit();
		em.close();
		//Zak zk=new ZakupyKategoria();
		//zs.setNazwa("nabial");
		
		//System.out.println(dodajSklep("mm"));//dodajKategorie("nabial1"));
		
		/*ZakupyUser zu=new ZakupyUser();
		zu.setNazwa("mateuszgmail");
		zu.setEmail("mateuszhyski1980@gmail.com");
		zu.setHaslo("mateusz80hyski");
		System.out.println(dodajUsera(zu));
		ZakupyTowarUserTest zt=new ZakupyTowarUserTest();
		zt.setNazwa("test");
		System.out.println(dodajTowar2("nabial","zabka",zt,"hyski.mateusz@gmail.com"));*/
		/*ZakupyTowar zt=new ZakupyTowar();
		//zt.setCena(34.00);
		zt.setNazwa("cokolwiek");
		Date datadodania = null;
		
		zt.setDatadodania(datadodania);*/
		//dodajTowar("nabial", "castorama", zt);*/
		/*List<ZakupySklep> lista_=getEM().createNamedQuery("szukajwszystkiesklepy").getResultList();
		for (Iterator iterator = lista_.iterator(); iterator.hasNext();) {
			System.out.println(((ZakupySklep)iterator.next()).getNazwa());
		}*/
		/*if(dodajTowar()==1)
			System.out.println("OK");
		else
			System.out.println("ERROR KATEGORIA");*/
	}
	public  static List<ZakupyUser> pobierz_userow(){
		return getEM().createNamedQuery("pobierzuserow").getResultList(); 
	}
	public  static List<ZakupySklep> pobierz_sklepy(){
		return getEM().createNamedQuery("szukajwszystkiesklepy").getResultList(); 
	}
	public  static List<Wojewodztwo> pobierz_wojewodztwa(){
		return getEM().createNamedQuery("wszystkiewojewodztwa").getResultList(); 
	}
	public  static List<Miasto> pobierz_miasta(){
		return getEM().createNamedQuery("szukajwszystkiemiasta").getResultList(); 
	}
	
	public  static List<ZakupyKategoria> pobierz_kategorie(){
		return getEM().createNamedQuery("szukajwszystkiekategorie").getResultList(); 
	}
	public static int dodajSklep(String nazwasklepu) {
		if(czyIstniejeSklep(nazwasklepu)==-1)
		{
		ZakupySklep zs = new ZakupySklep();
		zs.setNazwa(nazwasklepu);
		getEM().persist(zs);
		entityTransaction.commit();
		em.close();
		return 1;
		}
		else
			return -1;
	}
	public static int czyIstniejeSklep(String nowaSklepu){
		ZakupySklep zs;
		try{
		zs=(ZakupySklep) getEM().createNamedQuery("szukajsklep")
				.setParameter("nazwa", nowaSklepu).getSingleResult();
		}
		catch(Exception e){
			return -1;
		}
		if (zs!=null) return zs.getId();
		else
			return -1;
	}
	public static int czyIstniejeKategoria(String nowaKategoria){
		ZakupyKategoria zk;
		try{
		zk=(ZakupyKategoria) getEM().createNamedQuery("szukajkategorie")
				.setParameter("nazwa", nowaKategoria).getSingleResult();
		}
		catch(Exception e){
			return -1;
		}
		if (zk!=null) return zk.getId();
		else 
			return -1;
	}
	public static int dodajKategorie(String nowaKategoria){
		if(czyIstniejeKategoria(nowaKategoria)==-1){
			ZakupyKategoria zk=new ZakupyKategoria();
			zk.setNazwa(nowaKategoria);
			getEM().persist(zk);
			entityTransaction.commit();
			em.close();
			return 1;
		}
		else
		{
			return -1;
		}
	}
	public static int dodajUsera(ZakupyUser zu){
		if(czyIstniejeUser(zu.getEmail())==-1){
			getEM().persist(zu);
			entityTransaction.commit();
			em.close();
			return 1;
		}
		else
			return -1;
	}
	public static int czyIstniejeUser(String email){
		ZakupyUser zu=new ZakupyUser();
		List<ZakupyUser> temp_sklepy=pobierz_userow();
		for (Iterator it = temp_sklepy.iterator(); it.hasNext();) {
			ZakupyUser zkk=(ZakupyUser) it.next();
			if(zkk.getEmail().toUpperCase().equals(email.toUpperCase()))
				return zkk.getId();
		}
		return -1;
	}
}